/*
 * @Description  :
 * @Version      : 1.0
 * @Author       : Shiming
 * @Date         : 2022-01-25 13:10:49
 * @LastEditors  : Shiming
 * @LastEditTime : 2022-01-26 17:45:11
 * @FilePath     : \\tms-obc-web\\src\\app\\routes\\sys-setting\\components\\basic-setting\\basic-setting.component.ts
 * Copyright (C) 2022 huzhenhong. All rights reserved.
 */
import { Component, OnInit, ViewChild } from '@angular/core';
import { ACLService } from '@delon/acl';
import { SFComponent, SFSchema, SFUISchema } from '@delon/form';
import { SystemService } from '../../services/system.service';
const NOJSONTYPE = new Set([8, 12, 13]);
@Component({
  selector: 'app-basic-setting',
  templateUrl: './basic-setting.component.html',
  styleUrls: ['./basic-setting.component.less']
})
export class BasicSettingComponent implements OnInit {
  tabs: any[] = [];
  selectedTab: any = null;
  labelWidth = 250;
  configList: any = [];
  isCanSave = false;
  constructor(public service: SystemService, private acl: ACLService) {
    this.isCanSave = acl.data.full || !!acl.data.abilities?.find(a => a === 'SYSTEM-BASIC_SETTING-save');
  }

  ngOnInit() {
    this.getTypeList();
  }

  getTypeList() {
    this.service.request(this.service.$api_get_config_tree, { configFullKey: 'sys.config', extendType: 0 }).subscribe((res: Array<any>) => {
      if (res?.length > 0) {
        const typeData = res.find(config => config.configFullKey === 'sys.config');
        if (typeData) {
          this.tabs = typeData?.children;
          this.selectedTab = typeData?.children?.[0];
          this.getConfigList(this.selectedTab);
        }
      }
    });
  }

  getConfigList(selectedTab: any) {
    this.selectedTab = selectedTab;
    this.service.request(this.service.$api_get_config_by_parent_id, { id: selectedTab?.id }).subscribe((res: Array<any>) => {
      if (res?.length > 0) {
        res = res.map(item => ({
          ...item,
          remark: item.remark ? JSON.parse(item.remark) : null,
          itemValue: item?.itemValue ? (NOJSONTYPE.has(item?.itemType) ? item?.itemValue : JSON.parse(item?.itemValue)) : item?.itemValue,
          itemData: item.itemData ? JSON.parse(item.itemData) : item.itemData
        }));
        const hiddenType = res.find(item => item.itemType === 7 || item.itemType === 999);
        this.labelWidth = hiddenType ? 0 : 250;
        this.configList = res;
      } else {
        this.configList = [];
      }
    });
  }

  saveAction(params: any) {
    this.service.request(this.service.$api_update_config_batch, params).subscribe(res => {
      if (res) {
        this.service.msgSrv.success('修改配置成功');
        setTimeout(() => {
          this.getConfigList(this.selectedTab);
        }, 100);
      }
    });
  }
}
